#include "shm.h"
#include "comm.hpp"

/*
注意：
不能： a 先打开管道 再创建共享内存  而 b 先创建共享内存 再打开文件

因为 a 是读端，打开文件会一直阻塞，这到 b 开始运行打开写端
但是 因为 b 先创建共享内存 再打开文件，也就是说共享内存是由b创建而不是a创建
此时a在运行到createShm()，因为内存已经被创建，直接报错
*/

int main()
{
    PipeInit init;

    // //打开文件
    // int fd = open(filename, O_RDONLY); //等到写入方打开好才会打开向后执行，open 阻塞了
    // if(fd < 0)
    // {
    //     perror("open");
    //     exit(File_open_failed);
    // }

    int shmid = createShm(4096);
    char* ptr = (char*)shmat(shmid, nullptr, 0);

    printf("Serverb say: ");
    fflush(stdout);

    //打开文件
    int fd = open(filename, O_RDONLY); //等到写入方打开好才会打开向后执行，open 阻塞了
    if(fd < 0)
    {
        perror("open");
        exit(File_open_failed);
    }
 

    while(1)
    {
        int flag = 0;
        int n = read(fd, &flag, sizeof(int));
        if(n <= 0)
            break;
        std::cout << ptr << std::endl; 
        printf("Serverb say: ");
        fflush(stdout);
    }

    close(fd);
    if(shmdt(ptr) < 0)
    {
        perror("shmdt fail");
        exit(4);
    }
    destroyShm(shmid);
    return 0;
}